package cn.flying.base.common.excel;

import java.util.function.Consumer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import cn.flying.base.common.utils.JsonUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;

/**
 * @description: Excel工具类
 * @author: lvyong
 * @date: 2022年11月13日 20:02
 * @version: 1.0
 */
@Component
public class ExcelUtil<T> {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * 简单读取Excel 默认读取sheet1
     *
     * @param fileName 文件的路径+文件名
     * @param clazz    解析的数据类型
     */
    public void simpleRead(String fileName, Class<?> clazz, Consumer<T> consumer) {
        // 这里 需要指定读用哪个class去读，然后读取第一个sheet 文件流会自动关闭
        // 这里每次会读取100条数据 然后返回过来 直接调用使用数据就行
        EasyExcel.read(fileName, clazz, new PageReadListener<T>(dataList -> {
            for (T data : dataList) {
                logger.info("读取到一行数据：【{}】", JsonUtil.serializer(data));
                consumer.accept(data);
            }
        })).sheet().doRead();
    }
}
